package step5;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 다수의 클라이언트와 지속적으로 통신하는 MultiEchoServer 만들기
 * 다수의 클라이언트와 통신하기 위해서는 Thread가 필요하다. 
 * MultiEchoServer 에서는 ServerSocket 을 생성하고 
 * 클라이언트가 접속할 때마다 accept() 을 수행하여 
 * 개별 소켓을 반환받고 ServerWorker 를 이용한 스레드를 생성하여
 * 개별 클라이언트와 통신하도록 한다.
 * 
 * 멤버변수
 * ServerSocket
 * 메서드 
 * go() 
 * 
 * 개발 step
 * 1. 멤버변수 선언 (ServerSocket)
 * 2. go() 에서 ServerSocket을 생성 
 * 3. while(true)
 * 4. accept() -> Socket을 반환 : 접속ip 를 보여준다. 
 * 5. ServerWorker 생성시 Socket을 할당 
 * 6. Thread생성시 serverWorker를 할당 
 * 7. start()
 * 8. loop 종료
 * 9. finally 안에서 serverSocket을 close() 
 * @author kosta-00-kangsa-001
 *
 */
public class MultiEchoServer {
	private ServerSocket serverSocket;
	public void go() throws IOException{
		serverSocket=new ServerSocket(5432);
		System.out.println("**MultiEchoServer 실행**");
		while(true){
		Socket socket=serverSocket.accept();
		String user="["+socket.getInetAddress().toString()+"]님 입장~";
		System.out.println(user);
		ServerWorker worker=new ServerWorker(socket);
		Thread thread=new Thread(worker);
		thread.start();
		}
	}	
	public void closeServer() throws IOException{
		if(serverSocket!=null)
			serverSocket.close();
	}
	public static void main(String[] args) {
		MultiEchoServer server=new MultiEchoServer();
		try {
			server.go();
		} catch (IOException e) {			
			e.printStackTrace();
		}finally{
			try {
				server.closeServer();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
	}
}







